package net.zjitc.controller;

import net.zjitc.pojo.CartItem;
import net.zjitc.pojo.Order;
import net.zjitc.pojo.Orderitem;
import net.zjitc.pojo.User;
import net.zjitc.service.CartService;
import net.zjitc.service.OrderService;
import net.zjitc.service.impl.CartServiceImpl;
import net.zjitc.service.impl.OrderServiceImpl;
import net.zjitc.utils.CommonUtils;
import net.zjitc.utils.dispacher.URLMapping;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

/**
 * Created by Administrator on 2017/12/13.
 */
public class UserOrder {
    OrderService orderService = new OrderServiceImpl();
    CartService cartService = new CartServiceImpl();

    @URLMapping(url = "/creatOrder")
    public String creatOrder(HttpServletRequest request, HttpServletResponse response){
        /**
         * 1.从session user
         * 2.生成一个订单对象 order(id UUID,时间，未付款，收货人信息（默认收货信息，是当前用户），用户)
         * 3.订单根据购物车生成的（从数据库中查出购物车的信息cartlist）
         * 4.根据遍历cartlist购物车条目信息，生成订单条目（订单总价格total）,
         * 5.订单条目是个集合，要把它放在订单下面
         * 6.把order订单插入数据库（事务）
         * 7.购物车清空
         * 8.order放到request域中，转发到订单页面
         */
        //1.从session user
        User  user = (User) request.getSession().getAttribute("user");
        if (user==null){
            user= new User();
            user.setUid(1);
            user.setName("aaa");
            user.setAddr("工贸");
            user.setPhone("110");
        }
        //2. 生成一个订单对象 order(id UUID,时间，未付款，收货人信息（默认收货信息，是当前用户），用户)

        Order order = new Order();
        order.setOid(CommonUtils.getUUID());
        //默认收货信息为登录用户信息
        order.setAddr(user.getAddr());
        order.setPhone(user.getPhone());
        order.setName(user.getName());

        order.setState(0); //0  未付款  1  付款，但未发货 2. 发货，但未收货  3  收货 交易完成
        order.setUser(user);
        //下单时间 ？？下单时间 字符串  //写个方法 ，方法功能：日期转成字符串
        order.setOrdertime(CommonUtils.dateToString(new Date()));

        //3.订单根据购物车生成的（从数据库中查出购物车的信息cartlist）
        List<CartItem> _cartItemList = cartService.findByUid(user.getUid());
        //购物车为空时不生成
        if (_cartItemList==null){
            return "/WEB-INF/user/msg.jsp";
        }
        //4.根据遍历cartlist购物车条目信息，生成订单条目（订单总价格total）,
        List<Orderitem> orderitemList = new ArrayList<Orderitem>();//此集合用于存入订单条目
        double total=0.0;
        for(CartItem item :_cartItemList){
            Orderitem orderitem = new Orderitem();
            orderitem.setOrder(order);
            orderitem.setProduct(item.getProduct());
            orderitem.setOsatate(0); //评价状态
            orderitem.setCount(item.getQuantity());//设置数量
            orderitem.setSubtotal(item.getProduct().getShop_price()*item.getQuantity());
            total = total+item.getProduct().getShop_price()*item.getQuantity();//计算总价
            orderitemList.add(orderitem);
        }

        //5. 订单条目是个集合，要把它放在订单下面
        order.setOrderitemList(orderitemList);
        order.setTotal(total);

        //把order订单插入数据库（事务service）
        int count = orderService.add(order);  //订单生成 ok    error
           //* 7.此用户下的购物车清空
        //cartService.deleteByUid(user.getUid()); //删除 error   ok
             //   * 8.order放到request域中，转发到订单页面
        request.setAttribute("order",order);

        return "/WEB-INF/user/order.jsp";
    }
}
